﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BLLEP;
using BLLEP.Funcionalidad;
using System.Configuration;

namespace EstacionDePoder.Codigo
{
    public class CarritoManager
    {
        private HttpContext _context;

        public CarritoManager(HttpContext context)
        {
            _context = context;
        }

        public void AgregarItem(int idProductoVidriera)
        {
            List<CarritoItem> items = TraerItems();
            CarritoItem item = items.Where(i => i.IdProductoVidriera == idProductoVidriera).FirstOrDefault();
            decimal dolarPeso = decimal.Parse(ConfigurationManager.AppSettings["DolarPeso"].ToString());
            decimal recargoImpositivo = decimal.Parse(ConfigurationManager.AppSettings["RecargoImpositivo"].ToString());

            if (item == null)
            {
                EP_ProductoVidriera productoVidriera = new BLLProductoVidriera().TraerProducto(idProductoVidriera);
                item = new CarritoItem();
                item.Cantidad = 1;
                item.Descripcion = productoVidriera.EP_Producto.Nombre;
                item.ImagenUrl = productoVidriera.EP_Producto.Imagen;
                item.IdProductoVidriera = productoVidriera.IdProductoVidriera;
                item.Precio = (decimal) (productoVidriera.EP_Producto.Costo * dolarPeso * recargoImpositivo + productoVidriera.Ganancia);
                item.Precio = Math.Ceiling(item.Precio);
                item.Moneda = productoVidriera.EP_Producto.EP_Moneda.Nombre;
                item.ID = (items.Count == 0) ? 1 : (items.OrderByDescending(i => i.ID).Select(i => i.ID).FirstOrDefault() + 1);

                items.Add(item);
            }
            else
                item.Cantidad++;

            _context.Session["ListaCarritoItems"] = items;
        }

        public void RemoverItem(int ID)
        {
            List<CarritoItem> items = TraerItems();
            items.Remove(items.Where(i => i.ID == ID).FirstOrDefault());
            _context.Session["ListaCarritoItems"] = items;
        }

        public void ActualizarCantidad(int ID, int cantidad)
        {
            List<CarritoItem> items = TraerItems();
            CarritoItem item = items.Where(i => i.ID == ID).FirstOrDefault();

            if (items != null)
            {
                item.Cantidad = cantidad;
                _context.Session["ListaCarritoItems"] = items;
            }
        }

        public List<CarritoItem> TraerItems()
        {
            List<CarritoItem> items = _context.Session["ListaCarritoItems"] as List<CarritoItem>;

            if (items == null)
            {
                items = new List<CarritoItem>();
                _context.Session["ListaCarritoItems"] = items;
            }

            return items;
        }

        public void LimpiarCarrito()
        {
            _context.Session["ListaCarritoItems"] = new List<CarritoItem>();
        }
    }
}